package mybox.engine.fresnel;

import mybox.engine.Figur;
import mybox.engine.File4Qcad;
import mybox.engine.Line;
import mybox.engine.QVector;
import static java.lang.Math.*;

public class Zinken  implements Figur{
	
	File4Qcad file4qcad;
	
	double alpha;
	double dicke; //des Spiegels
	double breite;
	double sichtbareBreite;
	QVector offset;
	
	double brennweite;
	double fussabstand;
	
	Line spiegelAuflage;
	Line spiegelFlaeche;
	Line gegenLager;
	double verdeckungsLaenge;
	Line verdeckung;
	
	public Zinken(File4Qcad file4qcad,  double dicke, double breite, double verdeckung, double fussabstand, double absenkung, double brennweite) {
		this.file4qcad=file4qcad;		
		this.dicke=dicke;
		this.breite=breite;
		this.verdeckungsLaenge=verdeckung;
		this.sichtbareBreite=breite-verdeckung;
		this.fussabstand=fussabstand;
		this.offset=new QVector(fussabstand,-absenkung);
		this.brennweite=brennweite;
		init();
	}
	
	public double calcAlpha(QVector offset) {
		
		//Berechnet alpha durch iteratives Wiedereinsetzen in die Formel 
	    double alpha=0;
	    double alphaBack=0.1;
	        while (Math.abs(alphaBack-alpha)>0.00000001) {
	        alphaBack=alpha;
	        alpha=atan2((fussabstand+((sichtbareBreite)*Math.cos(alpha)/2)),((brennweite-offset.y)-((sichtbareBreite)*Math.sin(alpha)/2)))/2;
	    } 		
	   return alpha;
	}
	
	public void init() {
		 
		 alpha=calcAlpha(offset);
		
		 verdeckung = new Line(file4qcad,offset,
					new QVector(offset.x-verdeckungsLaenge*cos(alpha),offset.y-verdeckungsLaenge*sin(alpha)));
		 
		 spiegelFlaeche = new Line(file4qcad, offset, new QVector(offset.x+(sichtbareBreite)*cos(alpha),offset.y+(sichtbareBreite)*sin(alpha)));
		
		 gegenLager = new Line(file4qcad,verdeckung.end,
					new QVector(verdeckung.end.x+dicke*sin(alpha),verdeckung.end.y-dicke*cos(alpha)));
		 
		 spiegelAuflage = new Line(file4qcad,gegenLager.end,
				new QVector(gegenLager.end.x+breite*cos(alpha),gegenLager.end.y+breite*sin(alpha)));
		 
		 
		 
		 
		 
		 
	}
	@Override
	public void draw() {
		
		verdeckung.draw();
		mdraw(verdeckung);
		
		spiegelFlaeche.draw();
		mdraw(spiegelFlaeche);
		
		spiegelAuflage.draw();
		mdraw(spiegelAuflage);
		
		gegenLager.draw();
		mdraw(gegenLager);
		
	}
	
	public void mdraw(Line line) {
		Line.xMirror(file4qcad, 0, line).draw();	
	}

}
